package com.jinan.algorithm.slidingWindow;

//寻找数组的中心下标 一 给定一个整数数组nums,请编写一个能够返回数组“中心下标”的方法。
// 中心下标是数组的一个下标，其左侧所有元素相加的和等于右侧所有元素相加的和。
// 如果数组不存在中心下标，返回-1。如果数组有多个中心下标，应该返回最靠近左边的那一个。 注意:中心下标可能出现在数组的两端。
public class CenterIndexFinder {

    /**
     * findCenterIndex 方法接收一个整型数组 nums 作为参数。
     * 首先计算数组所有元素的总和 totalSum。
     * 使用变量 leftSum 来追踪从数组左侧累加的和。
     * 在 for 循环中，我们逐个遍历数组中的元素：
     * 每次迭代，从 totalSum 中减去当前元素的值，这是因为 totalSum 应该始终代表当前元素右侧所有元素的和。
     * 然后检查 leftSum 是否等于更新后的 totalSum，如果是，则当前元素的索引 i 即为中心下标，返回 i。
     * 否则，将当前元素的值加到 leftSum 上，准备下一次迭代。
     * 如果循环结束都没有找到中心下标，则返回 -1。
     * @param nums
     * @return
     */
    public static int findCenterIndex(int[] nums) {
        int totalSum = 0;
        int leftSum = 0;
        for (int num : nums) {
            totalSum += num;
        }
        for (int i = 0; i < nums.length; i++) {
//            leftSum += nums[i];
//            if (leftSum == totalSum) {
//                return i;
//            }
//            totalSum -= nums[i];
            if (leftSum == (totalSum -leftSum - nums[i])){
                return i;
            }
            leftSum += nums[i];
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] nums = {1, 7, 3, 6, 5, 6};
        System.out.println("Center index: " + findCenterIndex(nums));
    }
}
